package core.bmp.utils;

public class IntegerUtil {

	/**
	 * 将byte转化成无符号的int。比如，0xFF在byte中是用补码表示的-1，这里将会转化成255。
	 * 
	 * @param b
	 * @return
	 */
	public static int byteToUnsignedInt(byte b) {
		return b & 0xFF;
	}

	/**
	 * 将下标从0开始到3的byte转化成int，具体实现{@link #bytesToInt(byte[], int, int)}
	 * 
	 * @param bytes
	 * @return
	 */
	public static int bytesToInt(byte[] bytes) {
		return bytesToInt(bytes, 0, 4);
	}

	/**
	 * 将指定位数的byte按照大端序转int。
	 * 
	 * @param bytes
	 *            byte数组
	 * @param start
	 *            数据开始的下标
	 * @param len
	 *            将多少位byte转到int中
	 * @return byte转化成的int
	 */
	public static int bytesToInt(byte[] bytes, int start, int len) {
		// 验证合法性
		int toInt = 0x00000000;
		for (int i = 0; i < len; i++) {// 只做大端序
			toInt = toInt | (((int) bytes[start + i] & 0xFF) << i * 8);
		}
		return toInt;
	}

	/**
	 * 将int转为大端序的bytes数组
	 * 
	 * @param intValue
	 * @return
	 */
	public static byte[] intToBytes(int intValue) {
		byte[] bytes = new byte[4];
		// 你看，简单粗暴最有效
		bytes[0] = (byte) (intValue << 24 >> 24);
		bytes[1] = (byte) (intValue << 16 >> 24);
		bytes[2] = (byte) (intValue << 8 >> 24);
		bytes[3] = (byte) (intValue >> 24);
		return bytes;
	}

}
